/*
 * Copyright (c) 2024. hallele, Inc All rights reserved.
 */

package cn.hallele.mc.sdk.usercenter.common.enums;

import cn.hallele.infrastructure.data.converter.EnumConverter;
import cn.hallele.infrastructure.util.EnumUtil;
import lombok.Getter;

/**
 * SexEnum
 *
 * @author anle5
 * @since 2024/3/30 23:23
 */
@Getter
public enum SexEnum implements EnumConverter<Integer> {
    /**
     * 男
     */
    MALE(0),

    /**
     * 女
     */
    FEMALE(1),

    /**
     * 人妖
     */
    HERMAPHRODITE(2),

    /**
     * 双性人
     */
    BISEXUALITY(3),

    /**
     * 未知
     */
    UNKNOWN(5);

    /**
     * 内部标识
     */
    private final int code;

    SexEnum(int code) {
        this.code = code;
    }

    /**
     * 转换成实体字段值
     *
     * @param columValue 表字段里面的值
     * @return name
     */
    @Override
    public EnumConverter<Integer> convertToEntityAttribute(Integer columValue) {
        return EnumUtil.getBy((EnumUtil.HalFunction<SexEnum, Integer>) param -> param.code, columValue);
    }

    /**
     * 转换成表字段值
     *
     * @return 表字段里面的值
     */
    @Override
    public Integer convertToDatabaseColumn() {
        return this.code;
    }

    /**
     * SexEnum
     *
     * @param columValue code
     * @return SexEnum
     */
    public static SexEnum valueOfCode(Integer columValue) {
        return EnumUtil.getBy((EnumUtil.HalFunction<SexEnum, Integer>) param -> param.code, columValue);
    }
}
